package com.penghaisoft.microwms.material.web.intowarehouse.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.penghaisoft.microwms.common.page.Pager;
import com.penghaisoft.microwms.common.service.BaseService;
import com.penghaisoft.microwms.common.util.CommonUtils;
import com.penghaisoft.microwms.common.wms.model.MSBarCode;
import com.penghaisoft.microwms.common.wms.model.RawBarcode;
import com.penghaisoft.microwms.common.wms.model.RawStorageSn;
import com.penghaisoft.microwms.material.web.insidewarehouse.dao.RawStorageSnMapper;
import com.penghaisoft.microwms.material.web.intowarehouse.dao.MSBarCodeMapper;
import com.penghaisoft.microwms.material.web.intowarehouse.dao.RawBarcodeMapper;
import com.penghaisoft.microwms.material.web.intowarehouse.service.IMaterialIntoService;

/**
 * @Description 原材料入库
 * @author luoteng
 * @date 2018年5月23日 上午11:47:37
 * @version 1.0
 */
@Service("materialIntoService")
public class MaterialIntoServiceImpl extends BaseService implements
		IMaterialIntoService {
	@Resource
	private RawBarcodeMapper rawBarcodeMapper;
	
	@Resource
	private RawStorageSnMapper rawStorageSnMapper;
	
	@Resource
	private MSBarCodeMapper mSBarCodeMapper;
	
	/** 
	 * @Title findListByCondition
	 * @Description 原材料条码查询列表
	 * @author luoteng
	 * @date 2018年5月23日:上午11:58:10
	 * @param page
	 * @param rows
	 * @param condition
	 * @return
	 */
	@Override
	public Pager<RawBarcode> findListByCondition(int page, int rows, RawBarcode condition) {
		Pager<RawBarcode> pager = new Pager<>();
		pager.setPage(page);
		pager.setRows(rows);
//		condition.preQuery();
		List<RawBarcode> records = rawBarcodeMapper.queryList(pager, condition);
		long size = rawBarcodeMapper.queryCount(condition);
		pager.setRecords(records);
		pager.setTotalCount(size);
		return pager;
	}
	
	/** 
	 * @Title createBarcode
	 * @Description 条码新增
	 * @author luoteng
	 * @date 2018年5月23日:下午5:34:38
	 * @param condition
	 * @return int
	 */
	@Override
	public int createBarcode(RawBarcode condition){
		return rawBarcodeMapper.create(condition);
	}
	
	/** 
	 * @Title createBarcodeByList
	 * @Description 条码新增【批量】
	 * @author luoteng
	 * @date 2018年7月2日:下午3:53:03
	 * @param condition
	 * @param barcodeList
	 */
	@Override
	@Transactional
	public void createBarcodeByList(RawBarcode condition, List<String> barcodeList){
		for(String barCode : barcodeList){
			condition.setBarcode(barCode);
			rawBarcodeMapper.create(condition);
			
			MSBarCode record = new MSBarCode();
			record.setBarCode(condition.getBarcode());
			record.setModelCode(condition.getModel());
			record.setModelType(condition.getModelType());
			record.setContractNo(condition.getContractNo());
			record.setSpecification(condition.getAmount().toString());
			record.setUpdateDate(condition.getGmtCreate());
//			条码打印接口表
			mSBarCodeMapper.insertSelective(record);
		}
	}
	
	/** 
	 * @Title updateBarcode
	 * @Description 条码修改
	 * @author luoteng
	 * @date 2018年5月23日:下午5:34:47
	 * @param condition
	 * @return int
	 */
	@Override
	public int updateBarcode(RawBarcode condition){
		return rawBarcodeMapper.updateBySelect(condition);
	}
	
	/** 
	 * @Title updateBarcodeRelate
	 * @Description 条码修改【对应修改接口表】
	 * @author luoteng
	 * @date 2018年7月2日:下午5:25:15
	 * @param condition
	 */
	@Override
	public void updateBarcodeRelate(RawBarcode condition){
		rawBarcodeMapper.updateBySelect(condition);
		
		MSBarCode record = new MSBarCode();
		record.setBarCode(condition.getBarcode());
		// 有效标志 1-有效 0-无效
		if(condition.getActiveFlag() != null && condition.getActiveFlag().equals("0")){
			mSBarCodeMapper.deleteByBarcode(record);
		}else{
			record.setSpecification(condition.getAmount().toString());
			record.setUpdateDate(condition.getGmtCreate());
//			条码打印接口表
			mSBarCodeMapper.updateByBarcodeSelective(record);
		}
	}
	
	/** 
	 * @Title getBarcodeList
	 * @Description 获取条码数组
	 * @author luoteng
	 * @date 2018年5月23日:下午5:54:30
	 * @param condition
	 * @return List<RawBarcode>
	 */
	@Override
	public List<RawBarcode> getBarcodeList(RawBarcode condition){
		return rawBarcodeMapper.queryByAny(condition);
	}
	
	/** 
	 * @Title findIntoWhRawStorageSnList
	 * @Description 查询入库条码明细
	 * @author luoteng
	 * @date 2018年5月24日:下午4:17:47
	 * @param page
	 * @param rows
	 * @param condition
	 * @return Pager<RawStorageSn>
	 */
	@Override
	public Pager<RawStorageSn> findIntoWhRawStorageSnList(int page, int rows, RawStorageSn condition){
		Pager<RawStorageSn> pager = new Pager<>();
		pager.setPage(page);
		pager.setRows(rows);
//		退扫的不查询出来
		condition.preQuery();
//		查询入库明细 amout>0
		condition.setAmountUpZero("UpZero");
		List<RawStorageSn> records = rawStorageSnMapper.queryList(pager, condition);
		long size = rawStorageSnMapper.queryCount(condition);
		pager.setRecords(records);
		pager.setTotalCount(size);
		return pager;
	}
}
